/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.ugc.cnel.manabi.bakenbeans;

import com.icesoft.faces.component.ext.HtmlInputText;
import com.icesoft.faces.context.effects.JavascriptContext;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.context.FacesContext;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.ActionEvent;
import javax.faces.event.ActionListener;
import org.ugc.cnel.manabi.entidades.Ciudad;
import org.ugc.cnel.manabi.jpa.CiudadJpaController;
import org.ugc.cnel.manabi.jpa.exceptions.IllegalOrphanException;
import org.ugc.cnel.manabi.jpa.exceptions.NonexistentEntityException;

/**
 *
 * @author Admin
 */
public class ciudadBakenBean {

    /** Injection Managed Bean*/
    private eventosBakenBean ventana;
    private navegacionBakenBean nav;
    /** Propiedades Varias*/
    private String nombre_ciudad;
    private List<Ciudad> lista_cantones;
    private CiudadJpaController ciujpa;
    private boolean edit;
    private boolean btn_save_disable = true;
    private Ciudad ciudadseleccionada = null;
    /** Binding de Controles */
    private HtmlInputText txt_nombre_ciudad;
    private final AplicacionBean app_bean;

    /** Creates a new instance of ciudadBakenBean */
    public ciudadBakenBean() {
        //cargar el jpa de ciuadaes
        FacesContext facescontext = FacesContext.getCurrentInstance();
        app_bean=(AplicacionBean) facescontext.getELContext().getELResolver().getValue(facescontext.getELContext(), null, "AplicacionBean");
        ciujpa = (CiudadJpaController) facescontext.getELContext().getELResolver().getValue(facescontext.getELContext(), null, "CiudadJPA");

    }

    /** Setter and Getter Injection Managed Bean*/
    public navegacionBakenBean getNav() {
        return nav;
    }

    public void setNav(navegacionBakenBean nav) {
        this.nav = nav;
    }

    public eventosBakenBean getVentana() {
        return ventana;
    }

    public void setVentana(eventosBakenBean ventana) {
        this.ventana = ventana;
    }

    /** Getter and Setter Propiedades Varias*/
    public String getNombre_ciudad() {
        return nombre_ciudad;
    }

    public void setNombre_ciudad(String nombre_ciudad) {
        this.nombre_ciudad = nombre_ciudad;
    }

    public List<Ciudad> getLista_cantones() {
        return ciujpa.findCiudadEntities();
    }

    public void setLista_cantones(List<Ciudad> lista_cantones) {
        this.lista_cantones = lista_cantones;
    }

  
    public boolean isEdit() {
        return edit;
    }

    public void setEdit(boolean edit) {
        this.edit = edit;
    }

    public boolean isBtn_save_disable() {
        return btn_save_disable;
    }

    public void setBtn_save_disable(boolean btn_save_disable) {
        this.btn_save_disable = btn_save_disable;
    }

    public Ciudad getCiudadseleccionada() {
        return ciudadseleccionada;
    }

    public void setCiudadseleccionada(Ciudad ciudadseleccionada) {
        this.ciudadseleccionada = ciudadseleccionada;
    }

    /** Getter and Setter Binding de Controles */
    public HtmlInputText getTxt_nombre_ciudad() {
        return txt_nombre_ciudad;
    }

    public void setTxt_nombre_ciudad(HtmlInputText txt_nombre_ciudad) {
        this.txt_nombre_ciudad = txt_nombre_ciudad;
    }

    /** Seccion de Metodos del Bean*/
    /**
     * Metodo que se ejecuta presionar sobre el boton de guardar
     * @param evt Evento
     */
    public void guardar(ActionEvent evt) {
        try {
            Ciudad ciudad_ent = new Ciudad(isEdit() ? getCiudadseleccionada().getId() : new Integer(0),
                    txt_nombre_ciudad.getValue().toString().toUpperCase(), 13);
            ciudad_ent.setIdProvincia(new Integer(13));
            if (isEdit()) {
                //Editar Servicio
                ciujpa.edit(ciudad_ent);
            } else {
                //Nuevo Servicio
                ciujpa.create(ciudad_ent);

            }
            //refescar la lista de ciudades en el Bean de Aplicacion
            app_bean.init();
            ventana.setTipo_ventana(eventosBakenBean.CERRAR);
            ventana.setPopup_header("Informacion");
            ventana.setPopup_conten("Ciudad " + (isEdit() ? "Editada" : "Guardada") + " con exito");
            ventana.setPopup_visible(true);
            desactivar_controles();
            limpiar_text();
            //Refescar los servicios del cliente
            getLista_cantones();
            setEdit(false);
            //Ir al Scroll donde esta ubicada la tabla
            JavascriptContext.addJavascriptCall(FacesContext.getCurrentInstance(), "document.getElementById('form_sistema:new_ciudad').scrollIntoView(true);");
        } catch (NonexistentEntityException ex) {
            ventana.setTipo_ventana(eventosBakenBean.CERRAR);
            ventana.setPopup_header("Error");
            ventana.setPopup_conten(ex.getMessage());
            ventana.setPopup_visible(true);
            Logger.getLogger(ciudadBakenBean.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(ciudadBakenBean.class.getName()).log(Level.SEVERE, null, ex);
            ventana.setTipo_ventana(eventosBakenBean.CERRAR);
            ventana.setPopup_header("Error");
            ventana.setPopup_conten(ex.getMessage());
            ventana.setPopup_visible(true);
        }
    }

    /**
     * Metodo que se ejecuta presionar sobre el boton de editar
     * @param evt Evento
     */
    public void editar(ActionEvent evt) {
        Ciudad row_ciudad = (Ciudad) evt.getComponent().getAttributes().get("idfila");
        if (row_ciudad != null) {
            activar_controles();
            //Ir al Scroll donde esta ubicado el formulario
            JavascriptContext.addJavascriptCall(FacesContext.getCurrentInstance(), "document.getElementById('form_sistema:form_tbl_cuidades').scrollIntoView(true);");
            load_data_servicio(row_ciudad);
            setCiudadseleccionada(row_ciudad);
            setEdit(true);
        }
    }

    /**
     * Metodo que se ejecuta presionar sobre el boton de Cancelar
     * @param evt Evento
     */
    public void cancelar(ActionEvent evt) {
        limpiar_text();
        desactivar_controles();
        getNav().setPagina_contenido("indicadores/indicadores.jspx");
    }

    /**
     * Metodo que se ejecuta presionar sobre el boton de borrar
     * @param evt Evento
     */
    public void borrar(ActionEvent evt) {
        Ciudad row_ciudad = (Ciudad) evt.getComponent().getAttributes().get("idfila");
        if (row_ciudad != null) {
            setCiudadseleccionada(row_ciudad);
            getVentana().setPopup_header("Advertencia");
            getVentana().setPopup_conten("¿Desea Eliminar el Registro?");
            getVentana().setTipo_ventana(eventosBakenBean.ACEPTAR_CANCELAR);
            getVentana().setPopup_visible(true);
            // Agregar el ActionListener en caso que el boton aceptar sea presionado no se si esta bien pero creo que funciona
            getVentana().limpiar_listener();
            getVentana().getBtn_1().addActionListener(new ActionListener() {

                public void processAction(ActionEvent arg0) throws AbortProcessingException {
                    //Modifcar el Campo del estado borrado
                    //getCiudadseleccionada().setBorrado(true);
                    try {
                        ciujpa.destroy(getCiudadseleccionada().getId());
                        getLista_cantones();
                        //Ir al Scroll donde esta ubicada la tabla
                        JavascriptContext.addJavascriptCall(FacesContext.getCurrentInstance(), "document.getElementById('form_sistema:form_tbl_cuidades').scrollIntoView(true);");
                    } catch (IllegalOrphanException ex) {

                        getVentana().setTipo_ventana(eventosBakenBean.CERRAR);
                        getVentana().setPopup_header("Error al Guardar Ilegal");
                        getVentana().setPopup_conten(ex.getMessage());
                        getVentana().setPopup_visible(true);
                        Logger.getLogger(ciudadBakenBean.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (NonexistentEntityException ex) {
                        getVentana().setTipo_ventana(eventosBakenBean.CERRAR);
                        getVentana().setPopup_header("Error al Guardar no existe Entidad");
                        getVentana().setPopup_conten(ex.getMessage());
                        getVentana().setPopup_visible(true);
                        Logger.getLogger(ciudadBakenBean.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (Exception ex) {
                        getVentana().setTipo_ventana(eventosBakenBean.CERRAR);
                        getVentana().setPopup_header("Error al Guardar General");
                        getVentana().setPopup_conten(ex.getMessage());
                        getVentana().setPopup_visible(true);
                        Logger.getLogger(ciudadBakenBean.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            });
        }
    }

    /**
     * Metodo que se ejecuta presionar sobre el boton de nuevo
     * @param evt Evento
     */
    public void nuevo(ActionEvent evt) {
        setEdit(false);
        activar_controles();
    }

    private void activar_controles() {
        txt_nombre_ciudad.setDisabled(false);
        setBtn_save_disable(false);
        limpiar_text();
        txt_nombre_ciudad.requestFocus();
        //Ir al Scroll donde esta ubicado el formulario
        JavascriptContext.addJavascriptCall(FacesContext.getCurrentInstance(), "document.getElementById('form_sistema:form_tbl_cuidades').scrollIntoView(true);");
    }

    private void desactivar_controles() {
        txt_nombre_ciudad.setDisabled(true);
        setBtn_save_disable(true);
    }

    private void limpiar_text() {
        txt_nombre_ciudad.setSubmittedValue("");
        txt_nombre_ciudad.setValue("");
    }

    private void load_data_servicio(Ciudad row_ciudad) {
        txt_nombre_ciudad.setSubmittedValue(row_ciudad.getNombre());
        txt_nombre_ciudad.requestFocus();
    }
}
